// pages/activity/detail.js
const eventApi = require('../../api/event');
const app = getApp();

Page({
  data: {
    eventId: null,
    event: {},
    creator: null,
    participants: [],
    weather: null,
    isSignedUp: false,
    loading: true
  },

  onLoad(options) {
    if (options.id) {
      this.setData({ eventId: options.id });
      this.loadEventDetail();
    }
  },

  /**
   * 加载活动详情
   */
  loadEventDetail() {
    this.setData({ loading: true });

    eventApi.getEventDetail(this.data.eventId)
      .then(data => {
        // 格式化时间范围
        data.time_range = this.formatTimeRange(data.start_time, data.end_time);
        data.status_text = this.getStatusText(data.status);

        this.setData({
          event: data,
          creator: data.creator,
          isSignedUp: data.is_signed_up || false,
          loading: false
        });

        // 加载参与成员
        this.loadParticipants();

        // 加载天气信息
        if (data.city) {
          this.loadWeather(data.city);
        }
      })
      .catch(err => {
        console.error('加载活动详情失败:', err);
        this.setData({ loading: false });
        
        wx.showToast({
          title: '加载失败',
          icon: 'none'
        });
      });
  },

  /**
   * 加载参与成员
   */
  loadParticipants() {
    eventApi.getEventSignups(this.data.eventId, { page: 1, page_size: 10 })
      .then(data => {
        this.setData({
          participants: data.items || []
        });
      })
      .catch(err => {
        console.error('加载参与成员失败:', err);
      });
  },

  /**
   * 加载天气信息
   */
  loadWeather(city) {
    // TODO: 调用天气API
    // 这里使用模拟数据
    const mockWeather = {
      icon: '☀️',
      weather: '晴',
      temperature: 25,
      tips: '天气晴朗，适合户外运动！'
    };

    this.setData({ weather: mockWeather });
  },

  /**
   * 报名活动
   */
  signupEvent() {
    // 检查登录
    app.checkLogin().then(() => {
      wx.showModal({
        title: '确认报名',
        content: `确定要报名参加"${this.data.event.title}"吗？`,
        success: (res) => {
          if (res.confirm) {
            this.doSignup();
          }
        }
      });
    }).catch(() => {
      // 用户取消登录
    });
  },

  /**
   * 执行报名
   */
  doSignup() {
    wx.showLoading({ title: '报名中...' });

    eventApi.signupEvent(this.data.eventId, {})
      .then(() => {
        wx.hideLoading();
        wx.showToast({
          title: '报名成功',
          icon: 'success'
        });

        // 刷新页面数据
        this.loadEventDetail();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('报名失败:', err);
      });
  },

  /**
   * 取消报名
   */
  cancelSignup() {
    wx.showModal({
      title: '确认取消',
      content: '确定要取消报名吗？',
      success: (res) => {
        if (res.confirm) {
          this.doCancelSignup();
        }
      }
    });
  },

  /**
   * 执行取消报名
   */
  doCancelSignup() {
    wx.showLoading({ title: '取消中...' });

    eventApi.cancelSignup(this.data.eventId)
      .then(() => {
        wx.hideLoading();
        wx.showToast({
          title: '已取消报名',
          icon: 'success'
        });

        // 刷新页面数据
        this.loadEventDetail();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('取消报名失败:', err);
      });
  },

  /**
   * 查看所有参与者
   */
  viewAllParticipants() {
    // TODO: 跳转到参与者列表页面
    wx.showToast({
      title: '功能开发中',
      icon: 'none'
    });
  },

  /**
   * 导航到用户主页
   */
  navigateToUserProfile(e) {
    const { id } = e.currentTarget.dataset;
    // TODO: 跳转到用户主页
    wx.showToast({
      title: '功能开发中',
      icon: 'none'
    });
  },

  /**
   * 格式化时间范围
   */
  formatTimeRange(startTime, endTime) {
    const start = new Date(startTime);
    const end = new Date(endTime);

    const startDate = `${start.getMonth() + 1}月${start.getDate()}日`;
    const startTimeStr = `${start.getHours().toString().padStart(2, '0')}:${start.getMinutes().toString().padStart(2, '0')}`;
    const endTimeStr = `${end.getHours().toString().padStart(2, '0')}:${end.getMinutes().toString().padStart(2, '0')}`;

    return `${startDate} ${startTimeStr} - ${endTimeStr}`;
  },

  /**
   * 获取状态文本
   */
  getStatusText(status) {
    const statusMap = {
      'draft': '草稿',
      'published': '进行中',
      'cancelled': '已取消',
      'completed': '已结束'
    };
    return statusMap[status] || status;
  },

  /**
   * 下拉刷新
   */
  onPullDownRefresh() {
    this.loadEventDetail();
    wx.stopPullDownRefresh();
  },

  /**
   * 分享
   */
  onShareAppMessage() {
    return {
      title: this.data.event.title || '精彩活动',
      path: `/pages/activity/detail?id=${this.data.eventId}`,
      imageUrl: this.data.event.cover_image
    };
  },

  /**
   * 分享到朋友圈
   */
  onShareTimeline() {
    return {
      title: this.data.event.title || '精彩活动',
      imageUrl: this.data.event.cover_image
    };
  }
});

